Ext.onReady(function ()
{
	//获得数据store
	var termData = Ext.create('Ext.data.Store',
		{
			model : 'TermModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/GetTermList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox

	//学期combobox
	var termBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '学年:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : termData,
			queryMode : 'local',
			editable : false,
			disable : true,
			displayField : 'name',
			valueField : 'term_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadWeek(termBox.getValue());
				}
			}
		}
		);

	//获得数据store
	function loadWeek(tid)
	{
		//重新获得一个store，这样比较麻烦，但是很管用
		weekBox.store.removeAll();
		weekData = Ext.create('Ext.data.Store',
			{
				model : 'WeekModel',
				proxy :
				{
					type : 'ajax',
					url : basePath + 'term/getWeekList?tid=' + tid,
					reader :
					{
						type : 'json',
						root : 'root'
					}
				},
				autoLoad : true
			}
			);
		//bindStore被标记为不安全的用法，但是能有效解决不能显示重新绑定的store的问题
		weekBox.bindStore(weekData);
		weekBox.clearValue();
	}

	var weekData = Ext.create('Ext.data.Store',
		{
			model : 'WeekModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/getWeekList?tid=0',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox
	var weekBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '周次:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : weekData,
			queryMode : 'local',
			editable : false,
			displayField : 'week_describe',
			valueField : 'week_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadCourseGrid(termBox.getValue(), weekBox.getValue()); //获取id对应学年
				}
			}
		}
		);

	//获得数据store
	var courseData = Ext.create('Ext.data.Store',
		{
			model : 'CourseModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'course/getUserCourse',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox
	var CourseNameBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '课程:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : courseData,
			queryMode : 'local',
			editable : false,
			displayField : 'name',
			valueField : 'course_id',
			blankText : '不能为空',
			allowBlank : false
		}
		);

	Ext.QuickTips.init();

	//创建表格,可以加入更多的属性。
	var tmp = Ext.getCmp('showScheduleGrid');
	if (tmp != null)
		tmp.destroy();
	var showScheduleGrid = Ext.create("Ext.grid.Panel",
		{
			title : '【点击相应位置可以进行排课】',
			id : 'showScheduleGrid',
			name : 'showScheduleGrid',
			sortable : false,
			stripeRows : true,
			enableHdMenu : false,
			enableColumnHide : false,
			selType : 'cellmodel',
			loadMask : true,
			columnLines : true,
			columns : [], //注意此行代码，至关重要
			displayInfo : true,
			emptyMsg : "没有数据显示",
			viewConfig :
			{
				forceFit : true
			},
			listeners :
			{
				'select' : function (selModel, record, row, column, eOpts)
				{
					//Ext.Msg.alert(row.toString(),column.toString());
					if (column < 2)
						return;

					var addNewScheduleBox = Ext.create("Ext.form.FormPanel",
						{
							frame : false,
							bodyPadding : 10,
							defaultType : 'textfield',
							defaults :
							{
								anchor : '100%',
								labelWidth : 50,
								labelAlign : "right"
							},
							items : [
								//TeacherNameBox,
								CourseNameBox
							],
							buttons : [
								{
									text : '确定',
									handler : function ()
									{
										if (addNewScheduleBox.getForm().isValid())
										{
											addNewScheduleBox.getForm().submit(
											{
												url : basePath + 'course/addNewSchedule?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showScheduleGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row + '&cid=' + CourseNameBox.getValue(),
												method : 'POST',
												waitMsg : '正在排课，请稍候...',
												waitTitle : '排课中',
												timeout : 300000,
												success : function (addNewScheduleBox, action)
												{
													var isSuc = action.result.success;
													if (isSuc)
													{
														Ext.Msg.alert('排课成功！', '已经完成排课 ！');
														loadCourseGrid(termBox.getValue(), weekBox.getValue());
													}
												},
												failure : function (addNewScheduleBox, action)
												{
													var res = action.result.res;
													Ext.Msg.alert('排课失败', res);
												}
											}
											);
											addWindow.close();
										}
									}
								},
								{
									text : '删除',
									handler : function ()
									{
										Ext.Ajax.request(
										{
											url : basePath + 'course/deleteSchedule?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showScheduleGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
											method : 'POST',
											waitMsg : '正在删除，请稍候...',
											waitTitle : '删除中',
											timeout : 300000,
											success : function (response)
											{
												var res = Ext.JSON.decode(response.responseText);
												if (res.success)
												{
													Ext.Msg.alert('删除成功！', '已经完成删除，可以重新在此处添加课程！');
													loadCourseGrid(termBox.getValue(), weekBox.getValue());
												}
											},
											failure : function (response)
											{
												Ext.Msg.alert('错误', '删除失败');
											}
										}
										);
										addWindow.close();
									}
								}
							]
						}
						);

					var addWindow = Ext.create('Ext.window.Window',
						{
							title : '排课',
							height : 200,
							width : 400,
							layout : 'fit',
							modal : true,
							closeAction : 'hide',
							items : [addNewScheduleBox]
						}
						);
					Ext.Ajax.request(
					{
						url : basePath + 'course/hasScheduleAccess?tid=' + termBox.getValue() + '&wid=' + weekBox.getValue() + '&rid=' + showScheduleGrid.getView().getHeaderCt().getHeaderAtIndex(column).dataIndex + '&period=' + row,
						method : 'POST',
						success : function (response)
						{
							var json = Ext.JSON.decode(response.responseText);
							if (json.success)
							{
								hasAddScheduleAccess = true;
								addWindow.show()
							}
							else
							{
								//不可以对他人课程进行排课 弹出窗口很影响体验
								//Ext.Msg.alert('错误','你没有这个权限');
								return;
							}
						}
					}
					)
				}
			}
		}
		);

	//显示主窗体
	tmp = Ext.getCmp('ShowCoursePanel');
	if (tmp != null)
		tmp.destroy();
	var ShowCoursePanel = Ext.create("Ext.form.FormPanel",
		{
			title : '课程表',
			frame : false,
			defaultType : 'textfield',
			renderTo : 'showScheduleDiv',
			defaults :
			{
				labelWidth : 100,
				labelAlign : "right"
			},
			items : [
				termBox,
				weekBox,
				showScheduleGrid
			]
		}
		);

	//通过ajax获取表头、表格数据
	function loadCourseGrid(tid, wid)
	{
		Ext.Ajax.request(
		{
			url : basePath + 'course/GetCourseGrid?term_id=' + tid + '&week_id=' + wid, //从json文件中读取数据，也可以从其他地方获取数据
			method : 'POST',
			success : function (response)
			{
				//将返回的结果转换为json对象，注意extjs4中decode函数已经变成了：Ext.JSON.decode
				var json = Ext.JSON.decode(response.responseText); //获得后台传递json

				//创建store
				var store = Ext.create('Ext.data.Store',
					{
						fields : json.fields, //把json的fields赋给fields
						data : json.data //把json的data赋给data
					}
					);

				//根据store和column构造表格
				Ext.getCmp('showScheduleGrid').reconfigure(store, json.columns);
				//重新渲染表格
				//Ext.getCmp('showScheduleGrid').render();
			}
		}
		);
	}
}
);
